﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UtilZ.Dotnet.Ex.ZLog;

namespace UtilZ.Dotnet.Ex.Communication.Net.Ftp
{
    /// <summary>
    /// 返回系统类型
    /// Return system type.
    /// </summary>
    internal class FtpSYSTCommand : FtpCommandAbs
    {
        /***********************************************************************************************************
        * [SYST]（System,系统）命令
        * 说明：SYST用于查明服务器上操作系统的类型。
        * 
        * 用法SYST<CRLF>
        * 例子：
        * SendData "SYST" + “/r/n
        * 
        * 注释：按照推测，应答中的第一个单词是在Assigned Numbers文档[4]的当前版本中列出的某一个系统名称。但是，并不一定都能成功,新的系统每时每刻都在涌现。而公开的文档也许能跟上趟，也许不能。
        * 返回值如下（粗体表示成功）：
        * 215   NAME 系统类型。NAME是来自Assigned Numbers文档中的一个正式的系统名称。
        * 421  服务不可用，关闭控制连接。
        * 
        * 如果某项服务获知自己即将关闭，会向所有命令做出这个应答
        * 500  语法错误，无法识别命令。这其中包括命令行过长之类的错误。
        * 501  参数或变元中有语法错误。
        * 502  命令还没有被实现。
        * 
        ************************************************************************************************************/


        public FtpSYSTCommand()
            : base()
        {

        }



        protected override string[] GetNames()
        {
            return new string[] { FtpCommands.SYST };
        }




        protected override IFtpResponse PrimitiveExcute(FtpSession session, string command, string commandLine)
        {
            //Request: syst
            //Response: 215 Windows_NT

            try
            {
                return new FtpCodeResponse(FtpStatusCodes.Code215, Environment.OSVersion.Platform.ToString());
            }
            catch (Exception ex)
            {
                return new FtpCodeResponse(FtpStatusCodes.Code451, ex.Message);
            }
        }
    }

}
